// package cn.net.springboot.netty.http_demo;
//
// import io.netty.bootstrap.Bootstrap;
// import io.netty.channel.ChannelFuture;
// import io.netty.channel.ChannelHandler;
// import io.netty.channel.ChannelHandlerContext;
// import io.netty.channel.ChannelInitializer;
// import io.netty.channel.EventLoopGroup;
// import io.netty.channel.SimpleChannelInboundHandler;
// import io.netty.channel.nio.NioEventLoopGroup;
// import io.netty.channel.socket.SocketChannel;
// import io.netty.channel.socket.nio.NioSocketChannel;
// import io.netty.handler.codec.json.JsonObjectDecoder;
// import io.netty.handler.codec.protobuf.ProtobufDecoder;
// import io.netty.handler.codec.protobuf.ProtobufEncoder;
// import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
// import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
// import io.netty.handler.timeout.IdleStateHandler;
// import io.netty.util.concurrent.DefaultThreadFactory;
// import lombok.extern.slf4j.Slf4j;
//
// /**
//  * @author Chris
//  * @version 1.0.0
//  * @date 2019/05/16
//  * @since 1.0.0
//  */
// @Slf4j
// public class HttpClient {
//
//     public static void main(String[] args) {
//
//     }
//
//     /**
//      * 启动客户端
//      *
//      * @param cimServer
//      * @throws InterruptedException
//      */
//     private static void startClient() {
//         EventLoopGroup group = new NioEventLoopGroup(0, new DefaultThreadFactory("cim-work"));
//         Bootstrap bootstrap = new Bootstrap();
//         bootstrap.group(group)
//                 .channel(NioSocketChannel.class)
//                 .handler(new ChannelInitializer<NioSocketChannel>() {
//                     @Override
//                     protected void initChannel(NioSocketChannel ch) throws Exception {
//                         ch.pipeline()
//                                 //10 秒没发送消息 将IdleStateHandler 添加到 ChannelPipeline 中
//                                 .addLast(new IdleStateHandler(0, 10, 0))
//                                 //心跳解码
//                                 //.addLast(new HeartbeatEncode())
//                                 //拆包解码
//                                 .addLast(new JsonObjectDecoder())
//                                 //
//                                 //拆包编码
//                                 .addLast(new ProtobufVarint32LengthFieldPrepender())
//                                 .addLast(new ProtobufEncoder())
//                                 .addLast(new SimpleChannelInboundHandler() {
//                                     @Override
//                                     protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
//
//                                     }
//                                 })
//                         ;
//
//                     }
//                 })
//         ;
//
//         ChannelFuture future = null;
//         try {
//             future = bootstrap.connect(cimServer.getIp(), cimServer.getCimServerPort()).sync();
//         } catch (InterruptedException e) {
//             errorCount++;
//
//             if (errorCount >= configuration.getErrorCount()) {
//                 LOGGER.error("链接失败次数达到上限[{}]次", errorCount);
//                 msgHandle.shutdown();
//             }
//             LOGGER.error("连接失败", e);
//         }
//         if (future.isSuccess()) {
//             LOGGER.info("启动 cim client 成功");
//         }
//         channel = (SocketChannel) future.channel();
//     }
// }
